home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April / PCWorld_2008-04_cd.bin / v cisle / ozo / zotero-1.0.3.xpi / userdata.sql < prev   
Text File  |  2007-10-01  |  8KB  |  276 lines

  1. -- 36
  2.  
  3. -- This file creates tables containing user-specific data -- any changes
  4. -- to existing tables made here must be mirrored in transition steps in
  5. -- schema.js::_migrateSchema()
  6.  
  7.  
  8. CREATE TABLE IF NOT EXISTS version (
  9.     schema TEXT PRIMARY KEY,
  10.     version INT NOT NULL
  11. );
  12. CREATE INDEX IF NOT EXISTS schema ON version(schema);
  13.  
  14. CREATE TABLE IF NOT EXISTS settings (
  15.     setting TEXT,
  16.     key TEXT,
  17.     value,
  18.     PRIMARY KEY (setting, key)
  19. );
  20.  
  21. -- Show or hide pre-mapped fields for system item types
  22. CREATE TABLE IF NOT EXISTS userFieldMask (
  23.     itemTypeID INT,
  24.     fieldID INT,
  25.     hide INT,
  26.     PRIMARY KEY (itemTypeID, fieldID),
  27.     FOREIGN KEY (itemTypeID, fieldID) REFERENCES itemTypeFields(itemTypeID, fieldID)
  28. );
  29.  
  30. -- User-defined item types -- itemTypeIDs must be >= 1000
  31. CREATE TABLE IF NOT EXISTS userItemTypes (
  32.     itemTypeID INTEGER PRIMARY KEY,
  33.     typeName TEXT,
  34.     templateItemTypeID INT
  35. );
  36.  
  37. -- Control visibility and placement of system and user item types
  38. CREATE TABLE IF NOT EXISTS userItemTypeMask (
  39.     itemTypeID INTEGER PRIMARY KEY,
  40.     display INT, -- 0 == hide, 1 == show, 2 == primary
  41.     FOREIGN KEY (itemTypeID) REFERENCES userItemTypes(itemTypeID)
  42. );
  43.  
  44. -- User-defined fields
  45. CREATE TABLE IF NOT EXISTS userFields (
  46.     userFieldID INTEGER PRIMARY KEY,
  47.     fieldName TEXT
  48. );
  49.  
  50. -- Map custom fields to system and custom item types
  51. CREATE TABLE IF NOT EXISTS userItemTypeFields (
  52.     itemTypeID INT,
  53.     userFieldID INT,
  54.     orderIndex INT,
  55.     PRIMARY KEY (itemTypeID, userFieldID),
  56.     FOREIGN KEY (userFieldID) REFERENCES userFields(userFieldID)
  57. );
  58.  
  59. -- The foundational table; every item collected has a unique record here
  60. CREATE TABLE IF NOT EXISTS items (
  61.     itemID INTEGER PRIMARY KEY,
  62.     itemTypeID INT,
  63.     dateAdded DATETIME DEFAULT CURRENT_TIMESTAMP,
  64.     dateModified DATETIME DEFAULT CURRENT_TIMESTAMP
  65. );
  66.  
  67. CREATE TABLE IF NOT EXISTS itemDataValues (
  68.     valueID INTEGER PRIMARY KEY,
  69.     value
  70. );
  71.  
  72. -- Type-specific data for individual items
  73. --
  74. -- Triggers specified in schema.js due to lack of trigger IF [NOT] EXISTS in Firefox 2.0
  75. CREATE TABLE IF NOT EXISTS itemData (
  76.     itemID INT,
  77.     fieldID INT,
  78.     valueID,
  79.     PRIMARY KEY (itemID, fieldID),
  80.     FOREIGN KEY (itemID) REFERENCES items(itemID),
  81.     FOREIGN KEY (fieldID) REFERENCES fields(fieldID),
  82.     FOREIGN KEY (valueID) REFERENCES itemDataValues(valueID)
  83. );
  84.  
  85. -- Note data for note items
  86. CREATE TABLE IF NOT EXISTS itemNotes (
  87.     itemID INTEGER PRIMARY KEY,
  88.     sourceItemID INT,
  89.     note TEXT,
  90.     FOREIGN KEY (itemID) REFERENCES items(itemID),
  91.     FOREIGN KEY (sourceItemID) REFERENCES items(itemID)
  92. );
  93. CREATE INDEX IF NOT EXISTS itemNotes_sourceItemID ON itemNotes(sourceItemID);
  94.  
  95. CREATE TABLE IF NOT EXISTS itemNoteTitles (
  96.     itemID INTEGER PRIMARY KEY,
  97.     title TEXT,
  98.     FOREIGN KEY (itemID) REFERENCES itemNotes(itemID)
  99. );
  100.  
  101. -- Metadata for attachment items
  102. CREATE TABLE IF NOT EXISTS itemAttachments (
  103.     itemID INTEGER PRIMARY KEY,
  104.     sourceItemID INT,
  105.     linkMode INT,
  106.     mimeType TEXT,
  107.     charsetID INT,
  108.     path TEXT,
  109.     originalPath TEXT,
  110.     FOREIGN KEY (itemID) REFERENCES items(itemID),
  111.     FOREIGN KEY (sourceItemID) REFERENCES items(sourceItemID)
  112. );
  113. CREATE INDEX IF NOT EXISTS itemAttachments_sourceItemID ON itemAttachments(sourceItemID);
  114. CREATE INDEX IF NOT EXISTS itemAttachments_mimeType ON itemAttachments(mimeType);
  115.  
  116. -- Individual entries for each tag
  117. CREATE TABLE IF NOT EXISTS tags (
  118.     tagID INTEGER PRIMARY KEY,
  119.     tag TEXT,
  120.     tagType INT,
  121.     UNIQUE (tag, tagType)
  122. );
  123.  
  124. -- Associates items with keywords
  125. CREATE TABLE IF NOT EXISTS itemTags (
  126.     itemID INT,
  127.     tagID INT,
  128.     PRIMARY KEY (itemID, tagID),
  129.     FOREIGN KEY (itemID) REFERENCES items(itemID),
  130.     FOREIGN KEY (tagID) REFERENCES tags(tagID)
  131. );
  132. CREATE INDEX IF NOT EXISTS itemTags_tagID ON itemTags(tagID);
  133.  
  134. CREATE TABLE IF NOT EXISTS itemSeeAlso (
  135.     itemID INT,
  136.     linkedItemID INT,
  137.     PRIMARY KEY (itemID, linkedItemID),
  138.     FOREIGN KEY (itemID) REFERENCES items(itemID),
  139.     FOREIGN KEY (linkedItemID) REFERENCES items(itemID)
  140. );
  141. CREATE INDEX IF NOT EXISTS itemSeeAlso_linkedItemID ON itemSeeAlso(linkedItemID);
  142.  
  143. -- Names of each individual "creator" (inc. authors, editors, etc.)
  144. CREATE TABLE IF NOT EXISTS creators (
  145.     creatorID INTEGER PRIMARY KEY,
  146.     firstName TEXT,
  147.     lastName TEXT,
  148.     fieldMode INT
  149. );
  150.  
  151. -- Associates single or multiple creators to items
  152. CREATE TABLE IF NOT EXISTS itemCreators (
  153.     itemID INT,
  154.     creatorID INT,
  155.     creatorTypeID INT DEFAULT 1,
  156.     orderIndex INT DEFAULT 0,
  157.     PRIMARY KEY (itemID, creatorID, creatorTypeID, orderIndex),
  158.     FOREIGN KEY (itemID) REFERENCES items(itemID),
  159.     FOREIGN KEY (creatorID) REFERENCES creators(creatorID)
  160.     FOREIGN KEY (creatorTypeID) REFERENCES creatorTypes(creatorTypeID)
  161. );
  162.  
  163. -- Collections for holding items
  164. CREATE TABLE IF NOT EXISTS collections (
  165.     collectionID INTEGER PRIMARY KEY,
  166.     collectionName TEXT,
  167.     parentCollectionID INT,
  168.     FOREIGN KEY (parentCollectionID) REFERENCES collections(collectionID)
  169. );
  170.  
  171. -- Associates items with the various collections they belong to
  172. CREATE TABLE IF NOT EXISTS collectionItems (
  173.     collectionID INT,
  174.     itemID INT,
  175.     orderIndex INT DEFAULT 0,
  176.     PRIMARY KEY (collectionID, itemID),
  177.     FOREIGN KEY (collectionID) REFERENCES collections(collectionID),
  178.     FOREIGN KEY (itemID) REFERENCES items(itemID)
  179. );
  180. CREATE INDEX IF NOT EXISTS itemID ON collectionItems(itemID);
  181.  
  182. CREATE TABLE IF NOT EXISTS savedSearches (
  183.     savedSearchID INTEGER PRIMARY KEY,
  184.     savedSearchName TEXT
  185. );
  186.  
  187. CREATE TABLE IF NOT EXISTS savedSearchConditions (
  188.     savedSearchID INT,
  189.     searchConditionID INT,
  190.     condition TEXT,
  191.     operator TEXT,
  192.     value TEXT,
  193.     required NONE,
  194.     PRIMARY KEY (savedSearchID, searchConditionID),
  195.     FOREIGN KEY (savedSearchID) REFERENCES savedSearches(savedSearchID)
  196. );
  197.  
  198. CREATE TABLE IF NOT EXISTS fulltextItems (
  199.     itemID INTEGER PRIMARY KEY,
  200.     version INT,
  201.     indexedPages INT,
  202.     totalPages INT,
  203.     indexedChars INT,
  204.     totalChars INT,
  205.     FOREIGN KEY (itemID) REFERENCES items(itemID)
  206. );
  207. CREATE INDEX IF NOT EXISTS fulltextItems_version ON fulltextItems(version);
  208.  
  209. CREATE TABLE IF NOT EXISTS fulltextWords (
  210.     wordID INTEGER PRIMARY KEY,
  211.     word TEXT UNIQUE
  212. );
  213. CREATE INDEX IF NOT EXISTS fulltextWords_word ON fulltextWords(word);
  214.  
  215. CREATE TABLE IF NOT EXISTS fulltextItemWords (
  216.     wordID INT,
  217.     itemID INT,
  218.     PRIMARY KEY (wordID, itemID),
  219.     FOREIGN KEY (wordID) REFERENCES fulltextWords(wordID),
  220.     FOREIGN KEY (itemID) REFERENCES items(itemID)
  221. );
  222. CREATE INDEX IF NOT EXISTS fulltextItemWords_itemID ON fulltextItemWords(itemID);
  223.  
  224. CREATE TABLE IF NOT EXISTS translators (
  225.     translatorID TEXT PRIMARY KEY,
  226.     minVersion TEXT,
  227.     maxVersion TEXT,
  228.     lastUpdated DATETIME,
  229.     inRepository INT,
  230.     priority INT,
  231.     translatorType INT,
  232.     label TEXT,
  233.     creator TEXT,
  234.     target TEXT,
  235.     detectCode TEXT,
  236.     code TEXT
  237. );
  238. CREATE INDEX IF NOT EXISTS translators_type ON translators(translatorType);
  239.  
  240. CREATE TABLE IF NOT EXISTS csl (
  241.     cslID TEXT PRIMARY KEY,
  242.     updated DATETIME,
  243.     title TEXT,
  244.     csl TEXT
  245. );
  246.  
  247. CREATE TABLE IF NOT EXISTS annotations (
  248.     annotationID INTEGER PRIMARY KEY,
  249.     itemID INT,
  250.     parent TEXT,
  251.     textNode INT,
  252.     offset INT,
  253.     x INT,
  254.     y INT,
  255.     cols INT,
  256.     rows INT,
  257.     text TEXT,
  258.     collapsed BOOL,
  259.     dateModified DATE,
  260.     FOREIGN KEY (itemID) REFERENCES itemAttachments(itemID)
  261. );
  262. CREATE INDEX IF NOT EXISTS annotations_itemID ON annotations(itemID);
  263.  
  264. CREATE TABLE IF NOT EXISTS highlights (
  265.     highlightID INTEGER PRIMARY KEY,
  266.     itemID INTEGER,
  267.     startParent TEXT,
  268.     startTextNode INT,
  269.     startOffset INT,
  270.     endParent TEXT,
  271.     endTextNode INT,
  272.     endOffset INT,
  273.     dateModified DATE,
  274.     FOREIGN KEY (itemID) REFERENCES itemAttachments(itemID)
  275. );
  276. CREATE INDEX IF NOT EXISTS highlights_itemID ON highlights(itemID);